#include <iostream>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
using namespace std;

int main()
{
    // 获取key值
    key_t key = ftok("/tmp", 0x5678);
    if (key < 0)
    {
        perror("ftok error");
        return 1;
    }

    // int shmget(key_t key, size_t size, int shmflg);
    // 获取共享标识符
    int shmid = shmget(key, 4096, IPC_CREAT | IPC_EXCL | 0666);
    if (shmid < 0)
    {
        perror("shmid error");
        return 1;
    }

    // 进程与共享内存进行关联
    // void *shmat(int shmid, const void *shmaddr, int shmflg);
    //(void *) -1  is  returned,
    char *shmaddr = (char *)shmat(shmid, nullptr, 0);
    if (shmaddr == (char *)-1)
    {
        perror("shmat error");
        return 1;
    }

    // 向共享内存写入数据
    string str = "i am processA";
    strcpy(shmaddr, str.c_str());

    // 解除关联
    //  int shmdt(const void *shmaddr);
    shmdt(shmaddr);

    return 0;
}
